從學習程式的語法、電腦的思考邏輯,到寫程式解決逐漸龐雜的問題,我發現成為全端開發者沒有終點,而是段拓寬眼界格局和提高實踐能力的旅程。真正的起點,源自認知到自己是產品工匠的那一刻。原來前面的各種學習和一切練習,都是為了讓自己進入「工匠心流」的準備。
以有限的經驗和知識來看,我將以下列數種特質來詮釋何謂產品工匠,並且提供學習過程中可以應用的技巧。
由於科技進步和資訊爆炸,只要有足夠時間和資源,我們能打造出任何的產品或服務。但這時代最大的浪費,往往是「成功地」完成一項「不必要」的項目。
所以產品工匠在拿到規格後,不只是按圖索驥、寫出程式碼、做出功能。而會先探究「究竟要解決什麼問題?為什麼是這個問題?為了創造什麼價值?期待帶來什麼改變?使用者是誰?他會怎麼使用?最小可行功能是什麼?可以怎麼做?需要多久⋯⋯」
這個問題清單應該可以無限延伸,這一系列反思的主要目的是幫助自己能站在更高的角度、借重巨人的肩膀,看清產品創作的原貌。
在課程中,所謂的「產品」可以是教案的範例演練、綜合練習的作業,甚至整個教材及學習平台。
在每次動手實作前,先練習自問「為什麼要實作這個範例?」「業界的應用可你是什麼?」「這個作業背後的技術能解決什麼問題?」「商業上會怎麼操作?」「教材這麼設計的目的為何?」「完整的學習體驗是什麼?」等⋯⋯
我相信這些都沒有標準答案,但在每次反思、甚至與人討論的過程中,將能逐步鍛鍊綜觀全局的視野。
我認為好的產品不只是工具,更是工藝。除了產品原貌外,產品工匠對於事物的本質有著強烈的好奇心,對於探究問題的真相具備強烈的熱忱。
而對任何事都充滿好奇,以致成為曠世奇才的標竿人物,就是達文西。他不只是個傳奇畫家,更是個跨界奇才:天文、物理、光學、氣象、醫學、數學、建築、水利、軍事、機械等都有所涉略。為了繪出栩栩如生的人物和動物,進行大量的解剖並產出相關手稿。
產品工匠願意為了打造完美作品而不斷探尋本質,有時甚至純粹想瞭解本質後的真理而已。
閱讀完每個學習材料或完成作業時,能反問「為什麼要這麼做?」「是否有其他更好或有趣的做法?」「業界實務是什麼?為何如此?」
在允許的時間範圍中,盡情探索相關的額外資料、適時的提問,都能協助自己有更廣泛的認知,並且找回與生俱來的好奇心。
產品工匠對解決問題充滿熱情、期待攻克一項又一項的挑戰。面對複雜又龐大的問題時,不會只使用一套工具或方法論。只要能協助拆解問題、看清本質,他們願意大量採納,甚至整合或創新各種的思維框架或模型。關鍵是能協助自己抽絲剝繭、找出一條解決之道。
而在釐清的問題的過程中,搜尋引擎是他們最好的朋友。他們善於運用關鍵字找到可供參考的內容,並且擁有一套篩選優質資訊(俗稱乾貨)的判斷標準,以避開無關緊要或誤導人的資訊、加速想法的梳理。
在解題時,使用 運算思維(Computational Thinking)和輸入輸模型(input–process–output (IPO) model)來輔助思考,並運用心智圖之類的框架來呈現自己的思考脈絡。
在 Google 搜尋方面,需要聚焦刻意練習的是「提問能力」。透過每次的搜尋結果,逐步優化關鍵字提問,能逐步收斂到自己想要的結果。或者可以查詢「Google 搜尋技巧」,會發現大量未曾使用過的好用功能。
充分釐清問題及本質只是第一步,能夠高效地落實解決方案才能創造價值。《精實創業》一書中提及的「精實循環」,恰巧能協助我們用對方法解決對的問題。
重點概念是:「在時間金錢有限的情況下,能存活最久、進化最快的項目,才有機會脫穎而出。」
面對起初釐清的問題,背後其實帶有許多假設,往往必須透過實作、取得有效資料才能驗證。每次的驗證都會獲得高含金量的學習成果,並且用以投入下一次的實作。在反覆循環的過程,就能加速迭代優質解決方案。
由於達成目的,同時存在多種解法;但在有限時間內,主動設立停損點,篩選出預期成本最低、效益最高的方案,是最明智的選擇。而這個選擇本身,也能透過刻意練習反覆優化。
在各大產業加速數位化的現代,經過 COV-19 疫情後尤為劇烈。各種大規模的軟體服務林立,開發團隊的規模也持續成長。而這類軟體往往被切分為許多產品、模組及功能來開發及維護,可想而知「團隊協作」與「溝通協調」絕對是提高整體開發效能與效率的必備技能。
產品工匠要面對的,不只是即將成形的產品;更多時候會需要和產品經理(營運)、專案經理、UI/UX 設計師、測試,甚至業務和客服互動。當所有角色能各自發揮獨特價值、在所屬領域當責做領袖,並不斷完成團隊目標時,才真正足以齊力斷金。
在我的大腦資料庫中,堪稱團隊協作典範的,就是草帽海賊團。雖然是漫畫虛構,但每位成員不只擁有共同願景,在該發揮所長時更能躍升為領導者,而夥伴亦能同心協力順應領導。
在尚未參與在團隊開發的學習階段,在完成作業時觀摩、遇到瓶頸時提問、發現實用工具或觀念時分享,能大幅提高同儕的學習曲線。
而透過不斷琢磨程式的結構模型、變數命名、編排邏輯和撰寫風格等,並不時提醒自己「這是要寫給他人來閱讀的」,以致練就高易讀性的程式碼。對未來的協作,肯定是如虎添翼。
綜合以上的特質,產品工匠絕非獨善其身或僅僅技術能力卓越,更是同時具備跨領域職能及專業技術的 T 型人才。所以我才會認為:
成為全端開發者沒有終點,而是段拓寬眼界格局和提高實踐能力的旅程。
而走在這條旅途上的必要條件,就是「終身成長」。
雖說「終身學習、活到老學到老」是老生常談,但這對產品工匠來說學習只不過是日常生活的一部分,真正關鍵的是達成持續的成長;而「刻意練習」就是成就此目的的核心能力。
刻意練習就是「確立學習目的、找到學習模範、看清彼此差距、著重差異點反覆練習」的學習方法論。
同一份示範教材,在課程中建議我們使用三次刻意練習,而我將其客製化為適合自己的做法:
專注於理解每個步驟/指令所代表的功能,以及這些功能分別對應的資料夾與檔案位置。並反思以下學習重點:
完成第一次後,撰寫所有 commit message
完成第二次後,撰寫 README.md
文件
關掉教材,試試看自己能寫出多少,遇到問題或忘記時,再回頭參考教材。把自己當開發者,完整走過從啟動專案、版本控制等等細節。
而整個學習歷程中,很多的流程會重複地被練習,因此能逐步移轉焦點在那些較不熟悉的功能或方法上。(例如:自行架設本地伺服器的設定,一開始肯定不熟悉,走過幾個不同的教材後,肯定會逐漸熟稔。所以可以將時間花在練習資料庫的操作上。)
關於本系列更多內容及導讀,請閱讀作者於 Medium 個人專欄 【無限賽局玩家 Infinite Gamer | Publication – 】 上的文章 《用 JavaScript 打造全端產品的入門學習筆記》系列指南。